【iOS】block的使用 |
您所在的位置:网站首页 › ios block用法 › 【iOS】block的使用 |
【iOS】block的使用
Block 是iOS在4.0之后新增的程式语法,一般用于回调方法,功能上和delegate类似。本文将讲解block的几种常见的使用方法,当然,block中最值得注意的还是它的内存管理,我将在《》中讲到。 环境信息: Mac OS X 10.9.5 Xcode 5.1.1 IOS 7.1 正文: 为什么要使用block?1. 可代替delegate完成回调,而不需要像delegate那样繁琐 2. 在某些方面,可代替selector(如NSNotificationCenter在addObserver的时候,可以使用block,而不用单独定义方法) 3. 延长对象的生命周期(block会自动持有对象,这将在《》中讲到) 4. 提高代码的复用性和可读性 block结构block的结构和C语言的函数指针结构类似,只是将函数指针的*换成了^ ![]() block结构示意图 如何使用? 一、直接在方法中定义1. 无返回值无参数 定义: void (^block) (void);赋值: block = ^{ NSLog(@"block的内容"); };调用: block();2. 有返回值有参数 定义: int (^block)(int a);赋值: int (^block)(int a) = ^int(int a) { return a > 0 ? a : -a; };调用: NSLog(@"%d", block(-10));结果:2015-08-19 17:02:19.713 SX[4922:159637] 10 二、将block定义为属性 定义: @property (nonatomic, copy) int (^block)(int a);赋值: Class *object = [[Class alloc] init]; object.block = ^int (int a, int b) { return a > b ? a : b; };调用: 调用将会在Class内部进行,所以这里使用到的self是指上面的object对象。调用之前,最好先判断对象是否给block赋值,如果block为nil,调用block会导致程序崩溃。 if (_block) { self.block(10); } 三、在方法中将block作为参数传入着这种用法中,我们通常会使用typedef为block取一个别名 定义: typedef void(^Block)(int a); - (void)nslogParameterWithBlock:(Block)block { if (block) { block(10); } }赋值并调用: [object nslogParameterWithBlock:^(int a) { NSLog(@"%d", a); }]; 总结:block使用方便,在项目中,合适的使用block也是你的代码看起来高端大气上档次,但是block的内存管理确实是一项非常重要也非常容易出错的地方,稍不注意便会造成内存泄露,所以,在使用block的时候,也要小心。 本文转载自:http://www.brighttj.com/ios/ios-block-foundation.html blockios |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |